﻿using log4net;
using PcaCore.DAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace PcaParqueos.DAL
{
    public class dMovimiento
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(dMovimiento));

        #region Public

        public static long Insert(string empresaId,
                                  string oficinaId,
                                  long sesionId,
                                  string tipoMovimientoId,
                                  long liquidacionId,
                                  string usuarioId,
                                  string detalle,
                                  string monedaId,
                                  decimal monto)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_parqueos.fn_add_movimiento(varchar,--empresa_id $1
                //              varchar,--oficina_id $2
                //              bigint,--sesion_id $3
                //              varchar,--tipo_movimiento_id $4
                //              bigint,--liquidacion_id $5
                //              character,--usuario_id $6
                //              varchar,--detalle $7
                //              varchar,--moneda_id $8
                //              numeric --monto $9
                //              )RETURNS bigint
                object id = Core.ExecuteScalar("pca_parqueos.fn_add_movimiento",
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, oficinaId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, sesionId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, tipoMovimientoId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, liquidacionId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, usuarioId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, detalle),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, monedaId),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Numeric, monto));

                return Convert.ToInt64(id);
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        public static void Update(string empresaId,
                                  string oficinaId,
                                  long movimientoId,
                                  long sesionId,
                                  string tipoMovimientoId,
                                  string detalle,
                                  string monedaId,
                                  decimal monto)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_parqueos.fn_update_movimiento(varchar,--empresa_id $1
                //                 varchar,--oficina_id $2
                //                 bigint,--movimiento_id $3
                //                 bigint,--sesion_id $4
                //                 varchar,--tipo_movimiento_id $5
                //                 varchar,--detalle $6
                //                 varchar,--moneda_id $7
                //                 numeric --monto $8
                //                 )RETURNS void
                Core.ExecuteNonQuery("pca_parqueos.fn_update_movimiento",
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, oficinaId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, movimientoId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, sesionId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, tipoMovimientoId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, detalle),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, monedaId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Numeric, monto));
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        #endregion
    }
}
